/**
 * @file Observation.h
 *
 * Pojedyncza obserwacja - nagłówek.
 *
 * @author Zbigniew Siciarz
 * @date 2009
 * @version 2.0.0
 * @since 2.0.0
 */

#ifndef OBSERVATION_H_
#define OBSERVATION_H_

#include "Star.h"
#include <QString>

namespace Dogz
{
    /**
     * Abstrakcyjna klasa bazowa dla różnego rodzaju obserwacji.
     *
     * Klasa jest prostym typem o semantyce wartości, więc może być bezpiecznie
     * kopiowana w wywołaniach przez wartość (QString jest zresztą do tego
     * zoptymalizowany!).
     *
     * Jej potomkami są klasy obserwacji wizualnych, fotograficznych itp.
     */
    class Observation
    {
    public:
        Observation();
        virtual ~Observation() = 0;

        void setId(unsigned int id) { m_id = id; }
        unsigned int getId() const { return m_id; }

        void setStarName(const QString& starName) { m_starName = starName; }
        QString getStarName() const { return m_starName; }

        void setJd(double jd) { m_jd = jd; }
        double getJd() const { return m_jd; }

        void setMagnitude(float magnitude) { m_magnitude = magnitude; }
        float getMagnitude() const { return m_magnitude; }

        void setFainterThan(bool fainterThan ) { m_fainterThan = fainterThan; }
        bool isFainterThan() const { return m_fainterThan; }

        void setCompStarName(const QString& compStarName)
            { m_compStarName = compStarName; }
        QString getCompStarName() const { return m_compStarName; }

        void setChartDate(const QString& chartDate) { m_chartDate = chartDate; }
        QString getChartDate() const { return m_chartDate; }

        void setCommentCodes(const QString& commentCodes)
            { m_commentCodes = commentCodes; }
        QString getCommentCodes() const { return m_commentCodes; }

        void setNotes(const QString& notes) { m_notes = notes; }
        QString getNotes() const { return m_notes; }

        QString toString() const;

    private:
        /**
         * Identyfikator obserwacji w bazie.
         */
        unsigned int m_id;

        /**
         * Nazwa gwiazdy.
         */
        QString m_starName;

        /**
         * Czas wykonania obserwacji w JD.
         */
        double m_jd;

        /**
         * Zaobserwowana jasność.
         */
        float m_magnitude;

        /**
         * Czy gwiazda była słabsza niż podana jasność?
         */
        bool m_fainterThan;

        /**
         * Nazwa gwiazdy porównania.
         */
        QString m_compStarName;

        /**
         * Data mapki.
         */
        QString m_chartDate;

        /**
         * Kody komentarzy.
         */
        QString m_commentCodes;

        /**
         * Inne uwagi.
         */
        QString m_notes;
    };
}

#endif /* OBSERVATION_H_ */
